//
//  优先级队列.swift
//  Swift-LeetCode
//
//  Created by 卢悦明 on 2024/2/27.
//

import UIKit
/*
 用大顶堆/小顶堆实现优先级队列
 */
class PriorityQueue<Q: Equatable & Comparable> {
    var binaryHeap: BinaryHeap<Q>
    init(_ defaultValue:Q) {
        binaryHeap = BinaryHeap(10, defaultValue: defaultValue, .max_binary_heap)
    }
    //   队列长度
        func size() -> Int {
            binaryHeap.size()
        }
    //  队列是否为空
        func isEmpty() -> Bool {
            binaryHeap.isEmpty()
        }
        
        /// 入队列
        /// - Parameter elem: 数据元
        func push(elem: Q) {
            binaryHeap.add(elem)
        }
        /// 出队列
        /// - Returns: 数据
        func pop() -> Q? {
            binaryHeap.remove()
        }
    //    队列头部元素
        func peek() -> Q? {
            binaryHeap.get()
        }
        func clear() {
            binaryHeap.clear()
        }
}
